/**
 * 删除 顺序链表的重复元素，  重复的元素留一个
 */
public class LeetCode83 {


    public static ListNode deleteDuplicates(ListNode head) {
        //如果没有节点 或者只有一个节点 不需要删除直接返回
        if (head == null || head.next == null) {
            return head;
        }
        //创建两个指针
        ListNode p1 = new ListNode(-1, head);
        ListNode p2;

        while ((p2 = p1.next) != null) {  //循环每次赋值，p2每次都是在p1的下一个
            if (p2.val == p1.val) {
                //如果相邻两个元素值一下 就删掉一个
                p1.next = p2.next;
            } else {
                //不一样就往后移动 继续比较
                p1 = p1.next;
            }
        }
        return head;
    }

    /**
     * 递归解决
     *
     */
    public ListNode deleteDuplicates1(ListNode p) {
        if (p == null || p.next == null) {
            return p;
        }
        if (p.val == p.next.val) {
            return deleteDuplicates1(p.next);
        }else{
            p.next = deleteDuplicates1(p.next);
            return  p;
        }

    }

    public static void main(String[] args) {
        ListNode head = ListNode.of(1, 2, 2, 3, 3, 4);
        ListNode newHead = deleteDuplicates(head);
        System.out.println(newHead.toString());
    }

}
